package old;

/**
 * @Author：徐志荣
 * @Date：2023/6/3 下午 7:58
 *
 *
 * 方法一:
 * 使用之前的思维方式来构建汽车类
 *
 *
 * A类引用B类.B类引用C类,...
 * 之前的做法是: 引用的时候直接去new
 * 但是当 该类的构造函数发生变化时,我的整个调用链都需要发生改变,
 *  当一天,我不再去new 了,而是把当前的对象传进去,
 *  虽然,我整个调用链还是 A调B,B调C  ,当我的 C发生改变的时候,我的B,A是不需要进行任何代码修改的
 *  这就是ioc 依赖注入 这就是优势和特点.....
 *
 *
 */
public class App {
    public static void main(String[] args) {
        Car car = new Car(400);
        car.init();
    }

}

 class Car{
    private FrameWork frameWork;
    public Car(int size){
        frameWork = new FrameWork(size);
    }
    public void init(){
        //依赖车身
        System.out.println("汽车");
        frameWork.init();

    }
}

class FrameWork{
    private Bottom bottom;
    public FrameWork(int size){
        bottom = new Bottom(size);
    }
    public void init(){
        //依赖底盘
        System.out.println("车身");
        bottom.init();


    }
}

class Bottom{
    private Tire tire;
    public Bottom(int size){
        //如果轮胎想要定制的时候,发现,我的底盘也需要修改 构造函数
        tire = new Tire(size);
    }
    public void init(){
        //依赖轮胎
        System.out.println("底盘");
        tire.init();

    }
}

class Tire{
    private int size = 500;
    private String color;

    public Tire(int size){
        this.size = size;

    }
    public void init(){
        System.out.println("轮胎尺寸:"+this.size+", color:"+color);

    }
}
